/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ds_semetralka;

import entities.Faculty;
import entities.Professor;
import entities.Subject;
import java.util.List;
import java.util.Scanner;

/**
 *
 * @author Admin
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    private static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {

//          Generator generator = new Generator();
//          generator.generate();
        String type;

        System.out.println("***************************************************");
        System.out.println("Vítejte v systému...");
        System.out.println("***************************************************");

        do {
            System.out.println("Zadejte student pro studentské rozhraní, nebo profesor pro profesorské:");
            type = scanner.nextLine();
        } while (!type.equals("student") && !type.equals("profesor"));

        if (type.equals("student")) {

            StudentInterface inter = new StudentInterface();

            do {
                try {
                    System.out.println("Zadejte uživatelské číslo:");
                    long id = scanner.nextLong();

                    if (inter.setStudent(id) == false) {
                        System.out.println("Uživatel neexistuje...");
                    } else {
                        break;
                    }
                } catch (java.util.InputMismatchException ex) {
                    System.out.println("Chybný vstup");
                    scanner.nextLine();
                }
            } while (true);

            do {
                System.out.println("Zadejte heslo:");

                String password = scanner.next();

                if (password.equals(inter.getStudent().getPerson().getPassword())) {
                    System.out.println("Přihlášení proběhlo v pořádku.");
                    startStudentInterface(inter);
                    break;
                } else {
                    System.out.println("Chybné heslo.");
                }
            } while (true);



        } else {
            ProfessorInterface inter = new ProfessorInterface();

            do {
                try {
                    System.out.println("Zadejte uživatelské číslo:");
                    long id = scanner.nextLong();

                    if (inter.setProfessor(id) == false) {
                        System.out.println("Uživatel neexistuje...");
                    } else {
                        break;
                    }
                } catch (java.util.InputMismatchException ex) {
                    System.out.println("Chybný vstup");
                    scanner.nextLine();
                }
            } while (true);

            do {
                System.out.println("Zadejte heslo:");

                String password = scanner.next();

                if (password.equals(inter.getProfessor().getPerson().getPassword())) {
                    System.out.println("Přihlášení proběhlo v pořádku.");
                    startProfessorInterface(inter);
                    break;
                } else {
                    System.out.println("Chybné heslo.");
                }
            } while (true);
        }

    }

    private static void startStudentInterface(StudentInterface inter) {
        int choice;

        while (true) {

            printStudentsMenu();
            try {
                choice = scanner.nextInt();

                switch (choice) {
                    case (1):
                        for (Subject subject : inter.getAllSubjects()) {
                            System.out.println(subject);
                        }
                        break;
                    case (2):
                        for (Subject subject : inter.getStudentsSubjects()) {
                            System.out.println(subject);
                        }
                        break;
                    case (3):
                        System.out.println("Zadejte id předmětu:");
                        long subjectId = scanner.nextLong();
                        inter.addSubject(subjectId);
                        break;
                    case (4):
                        System.out.println("Zadejte id předmětu:");
                        long subjectId1 = scanner.nextLong();
                        inter.removeSubject(subjectId1);
                        break;
                    case (5):
                        for (Professor professor : inter.getAllProfessors()) {
                            System.out.println(professor);
                        }
                        break;
                    case (6):
                        System.out.println("Zadejte id fakulty");
                        long facultyId = scanner.nextLong();
                        for (Subject subject : inter.getSubjectsFromFaculty(facultyId)) {
                            System.out.println(subject);
                        }
                        break;
                    case (7):
                        System.out.println("Zadejte id garanta");
                        long professorId = scanner.nextLong();

                        List<Subject> subjects = inter.getProfessorsSubjects(professorId);

                        if (subjects != null) {
                            for (Subject subject : subjects) {
                                System.out.println(subject);
                            }
                        }
                        break;
                    case (8):
                        for (Faculty faculty : inter.getAllFaculties()) {
                            System.out.println(faculty);
                        }
                        break;
                    case (9):
                        return;
                    default:
                        System.out.println("Neplatná volba...");
                }

            } catch (java.util.InputMismatchException ex) {
                System.out.println("Chybný vstup");
            }
            System.out.println("Enter pro pokračování.");
            scanner.nextLine();
            scanner.nextLine();



        }
    }

    private static void startProfessorInterface(ProfessorInterface inter) {
        int choice;

        while (true) {

            printProfessorsMenu();
            try {
                choice = scanner.nextInt();

                switch (choice) {
                    case (1):
                        for (Subject subject : inter.getAllSubjects()) {
                            System.out.println(subject);
                        }
                        break;
                    case (2):
                        for (Subject subject : inter.getSupervisedSubjects()) {
                            System.out.println(subject);
                        }
                        break;
                    case (3):
                        createSubject(inter);
                        break;
                    case (4):
                        System.out.println("Zadejte id předmětu:");
                        long subjectId = scanner.nextLong();
                        inter.addSubject(subjectId);
                        break;
                    case (5):
                        for (Faculty faculty : inter.getAllFaculties()) {
                            System.out.println(faculty);
                        }
                        break;
                    case (6):
                        for (Subject subject : inter.getProfessorsSubjects()) {
                            System.out.println(subject);
                        }
                        break;
                    case (7):
                        System.out.println("Zadejte id předmětu:");
                        subjectId = scanner.nextLong();
                        if (inter.checkMaxStudents(subjectId)) {
                            System.out.println("Předmět není plně zaplněn.");
                        } else {
                            System.out.println("Předmět již překročil maximální počet studentů");
                        }
                        break;
                    case (8):
                        return;
                    default:
                        System.out.println("Neplatná volba...");
                }

            } catch (java.util.InputMismatchException ex) {
                System.out.println("Chybný vstup");

            }
            System.out.println("Enter pro pokračování.");
            scanner.nextLine();
            scanner.nextLine();

        }
    }

    private static void printStudentsMenu() {
        System.out.println("***************************************************");
        System.out.println("1 pro zobrazení všech předmětů.");
        System.out.println("2 pro mé předměty.");
        System.out.println("3 pro přidáni předmětu.");
        System.out.println("4 pro odebrání předmětu.");
        System.out.println("5 pro vypsání všech profesorů.");
        System.out.println("6 pro předměty z konkrétní fakulty.");
        System.out.println("7 pro předměty od konkrétního garanta.");
        System.out.println("8 pro zobrazení všech fakult.");
        System.out.println("9 pro ukončení.");
        System.out.println("***************************************************");
    }

    private static void printProfessorsMenu() {
        System.out.println("***************************************************");
        System.out.println("1 pro zobrazení všech předmětů.");
        System.out.println("2 pro mé předměty.");
        System.out.println("3 pro vytvoření předmětu.");
        System.out.println("4 pro zapsání k profesorům předmětu.");
        System.out.println("5 pro zobrazení všech fakult.");
        System.out.println("6 pro učené předměty.");
        System.out.println("7 pro zkontrolování maximálního počtu studentů.");
        System.out.println("8 pro ukončení.");
        System.out.println("***************************************************");
    }

    private static void createSubject(ProfessorInterface inter) {
        System.out.println("Zadejte jméno předmětu:");
        String subjectName = "";

        subjectName = scanner.nextLine();
        subjectName = scanner.nextLine();

        System.out.println("Zadejte kapacitu předmětu:");
        int capacity = scanner.nextInt();

        System.out.println("Zadejte kredity předmětu:");
        short credits = scanner.nextShort();

        System.out.println("Zadejte id fakulty na která bude předmět vyučován:");
        long facultyId = scanner.nextLong();

        Subject tempSubject = new Subject(subjectName, capacity, credits);

        inter.createSubject(facultyId, tempSubject);
    }
}
